//导入自定义js模块
let myParam = require('./params.js');

//一、使用require引入http模块，获取http请求对象
//    使用require引入fs模块，获取fs文件读写对象
const http = require('http');
const fs = require('fs');
//二、设置服务器信息
//设置ip地址
const hostname = '127.0.0.1';
//设置端口号
const port = 3000;
//三、搭建服务
const server = http.createServer((request,response)=>{

    //设置响应头信息
    response.setHeader('Content-Type', 'text/plain;charset=utf-8' );
    //设置允许跨域
    response.setHeader("Access-Control-Allow-Origin","*");

    //区分请求
    let paramObj = myParam.getParams(request.url);
    console.log(paramObj);

    //区分请求
    if(paramObj.flag == "searchGrade"){
        //查询年级的请求
        //使用fs模块读取json文件中的数据
        fs.readFile('E:/vscodeSpace/web30/web30-nodejs/chapter3/js/server/gradeData.json','utf8',(err, data) => {
            if (err) {
                //有错误就终止
                console.error(err);
                return;
            }
            //获取文件数据
            let gradeJson = JSON.parse(data);
            //封装响应结果
            let resultObj = {
                code:200,
                msg:"OK",
                data:gradeJson
            }
            response.end(JSON.stringify(resultObj));
        });
    }else if(paramObj.flag == "searchStudent"){
        //查询学生的请求
        //使用fs模块读取json文件中的数据
        fs.readFile('E:/vscodeSpace/web30/web30-nodejs/chapter3/js/server/studentData.json','utf8',(err, data) => {
            if (err) {
                //有错误就终止
                console.error(err);
                return;
            }
            //获取文件数据
            let studentJson = JSON.parse(data);

            //封装响应结果
            let resultObj = {
                code:200,
                msg:"OK",
                data:studentJson
            }
            response.end(JSON.stringify(resultObj));
        });
        
    }else if(paramObj.flag == "selectStudent"){
        //查询学生的请求
        //使用fs模块读取json文件中的数据
        fs.readFile('E:/vscodeSpace/web30/web30-nodejs/chapter3/js/server/studentData.json','utf8',(err, data) => {
            if (err) {
                //有错误就终止
                console.error(err);
                return;
            }
            //获取文件数据
            let studentJson = JSON.parse(data);
            //响应结果
            let result=[];
            //根据不同条件情况，封装不同响应数据
            for(let item of studentJson){
                if(paramObj.xm && paramObj.nj != "--请选择--"){//两个条件都有时
                    if(item.stuName.includes(paramObj.xm) && item.gradeName == paramObj.nj){
                        result.push(item);
                    }
                }else if(paramObj.xm){//只有姓名条件有
                    if(item.stuName.includes(paramObj.xm)){
                        result.push(item);
                    }
                }else if(paramObj.nj != "--请选择--"){//只有年级条件有
                    if(item.gradeName == paramObj.nj){
                        result.push(item);
                    }
                }else{//没有条件
                    result.push(item);
                }
            }  

            //封装响应结果
            let resultObj = {
                code:200,
                msg:"OK",
                data:result
            }
            response.end(JSON.stringify(resultObj));
        });
    }else if(paramObj.flag == "deleteStudent"){
        //使用fs模块读取json文件中的数据
        fs.readFile('E:/vscodeSpace/web30/web30-nodejs/chapter3/js/server/studentData.json','utf8',(err, data) => {
            if (err) {
                //有错误就终止
                console.error(err);
                return;
            }
            //获取文件数据
            let studentJson = JSON.parse(data);
            //响应结果
            for(let i=0; i<studentJson.length; i++){
                if(studentJson[i].stuNo == paramObj.xh){
                    studentJson.splice(i,1);
                }
            }

            //使用fs模块写json数据到文件中 writeFile  appendFile
            fs.writeFile('E:/vscodeSpace/web30/web30-nodejs/chapter3/js/server/studentData.json', JSON.stringify(studentJson), (err) => {
                if (err) {
                    console.error(err)
                    return
                } 

                //封装响应结果
                let resultObj = {
                    code:200,
                    msg:"OK",
                    data:studentJson
                }
                response.end(JSON.stringify(resultObj));

            });
            
        });
        
    }else if(paramObj.flag == "searchStuByNo"){
        console.log(paramObj.xh);
        fs.readFile('E:/vscodeSpace/web30/web30-nodejs/chapter3/js/server/studentData.json','utf8',(err, data) => {
            if (err) {
                //有错误就终止
                console.error(err);
                return;
            }
            //获取文件数据
            let studentJson = JSON.parse(data);
            //响应结果
            let result;
            for(let i=0; i<studentJson.length; i++){
                if(studentJson[i].stuNo == paramObj.xh){
                    result = studentJson[i];
                    break;
                }
            }
            //封装响应结果
            let resultObj = {
                code:200,
                msg:"OK",
                data:result
            }
            response.end(JSON.stringify(resultObj));
        })
    }else if(paramObj.flag == "updateSaveStudent"){
        //获取维护的学生对象
        let stuJson = JSON.parse(paramObj.stu);
        
        //使用fs模块读取json文件中的数据
        fs.readFile('E:/vscodeSpace/web30/web30-nodejs/chapter3/js/server/studentData.json','utf8',(err, data) => {
            if (err) {
                //有错误就终止
                console.error(err);
                return;
            }
            //获取文件数据
            let studentJson = JSON.parse(data);
            //响应结果
            for(let i=0; i<studentJson.length; i++){
                if(studentJson[i].stuNo == stuJson.stuNo){
                    studentJson[i].stuName = stuJson.stuName;
                    studentJson[i].gradeName = stuJson.gradeName;
                    break;
                }
            }

            //使用fs模块写json数据到文件中 writeFile  appendFile
            fs.writeFile('E:/vscodeSpace/web30/web30-nodejs/chapter3/js/server/studentData.json', JSON.stringify(studentJson), (err) => {
                if (err) {
                    console.error(err)
                    return
                } 

                //封装响应结果
                let resultObj = {
                    code:200,
                    msg:"OK",
                    data:studentJson
                }
                response.end(JSON.stringify(resultObj));

            });   
        });
    }else if(paramObj.flag == "insertSaveStudent"){
        //获取维护的学生对象
        let stuJson = JSON.parse(paramObj.stu);
        
        //使用fs模块读取json文件中的数据
        fs.readFile('E:/vscodeSpace/web30/web30-nodejs/chapter3/js/server/studentData.json','utf8',(err, data) => {
            if (err) {
                //有错误就终止
                console.error(err);
                return;
            }
            //获取文件数据
            let studentJson = JSON.parse(data);
            //响应结果
            studentJson.push(stuJson);

            //使用fs模块写json数据到文件中 writeFile  appendFile
            fs.writeFile('E:/vscodeSpace/web30/web30-nodejs/chapter3/js/server/studentData.json', JSON.stringify(studentJson), (err) => {
                if (err) {
                    console.error(err)
                    return
                } 

                //封装响应结果
                let resultObj = {
                    code:200,
                    msg:"OK",
                    data:studentJson
                }
                response.end(JSON.stringify(resultObj));

            });   
        });
    }

})
//四、监听服务
//让服务器能实时获取请求
server.listen(port,hostname,()=>{
    //在服务端输出
    console.log(`Node.js Server is running on http://${hostname}:${port}  `);
});